const { app } = require('electron');
const fs = require('fs').promises;
const path = require('path');
const os = require('os');

class ConfigManager {
  constructor() {
    this.configDir = path.join(os.homedir(), '.electron-note');
    this.configFile = path.join(this.configDir, 'config.json');
    this.defaultConfig = {
      app: {
        name: 'Electron Note',
        version: '1.0.0',
        theme: 'light',
        language: 'zh-CN'
      },
      editor: {
        fontSize: 14,
        fontFamily: 'Consolas, "Courier New", monospace',
        tabSize: 2,
        wordWrap: true,
        showLineNumbers: true,
        autoSave: true,
        autoSaveDelay: 1000
      },
      preview: {
        enableGitHubStyle: true,
        enableMathJax: false,
        enableMermaid: false,
        enableFlowchart: false
      },
      file: {
        defaultDirectory: path.join(os.homedir(), 'Documents', 'Notes'),
        autoCreateDirectory: true,
        supportedFormats: ['.md', '.markdown', '.txt']
      },
      window: {
        width: 1200,
        height: 800,
        x: null,
        y: null,
        maximized: false
      },
      plugins: {
        enabled: [],
        disabled: []
      },
      shortcuts: {
        newFile: 'Ctrl+N',
        openFile: 'Ctrl+O',
        saveFile: 'Ctrl+S',
        togglePreview: 'Ctrl+P',
        toggleSidebar: 'Ctrl+B'
      }
    };
  }

  async ensureConfigDir() {
    try {
      await fs.access(this.configDir);
    } catch (error) {
      await fs.mkdir(this.configDir, { recursive: true });
      console.log('创建配置目录:', this.configDir);
    }
  }

  async loadConfig() {
    try {
      await this.ensureConfigDir();
      const data = await fs.readFile(this.configFile, 'utf8');
      return JSON.parse(data);
    } catch (error) {
      console.log('配置文件不存在，创建默认配置');
      await this.createDefaultConfig();
      return this.defaultConfig;
    }
  }

  async saveConfig(config) {
    try {
      await this.ensureConfigDir();
      await fs.writeFile(this.configFile, JSON.stringify(config, null, 2), 'utf8');
      console.log('配置文件已保存:', this.configFile);
    } catch (error) {
      console.error('保存配置文件失败:', error);
    }
  }

  async createDefaultConfig() {
    try {
      await this.ensureConfigDir();
      
      // 创建默认笔记目录
      const defaultDir = this.defaultConfig.file.defaultDirectory;
      try {
        await fs.access(defaultDir);
      } catch (error) {
        await fs.mkdir(defaultDir, { recursive: true });
        console.log('创建默认笔记目录:', defaultDir);
        
        // 创建示例文件
        const exampleFile = path.join(defaultDir, '欢迎使用.md');
        const exampleContent = `# 欢迎使用 Electron Note

这是一个基于Electron的Markdown笔记应用。

## 功能特性

- 📝 实时Markdown预览
- 📁 文件管理
- 🎨 多种主题支持
- 🔌 插件系统
- ⌨️ 自定义快捷键

## 开始使用

1. 点击侧边栏的"+"按钮创建新文件
2. 在编辑区输入Markdown内容
3. 右侧实时预览效果
4. 使用快捷键提高效率

## 快捷键

- **Ctrl+N**: 新建文件
- **Ctrl+O**: 打开文件
- **Ctrl+S**: 保存文件
- **Ctrl+P**: 切换预览
- **Ctrl+B**: 切换侧边栏

---

开始您的Markdown写作之旅吧！
`;
        
        await fs.writeFile(exampleFile, exampleContent, 'utf8');
        console.log('创建示例文件:', exampleFile);
      }
      
      await fs.writeFile(this.configFile, JSON.stringify(this.defaultConfig, null, 2), 'utf8');
      console.log('创建默认配置文件:', this.configFile);
    } catch (error) {
      console.error('创建默认配置失败:', error);
    }
  }

  async updateConfig(updates) {
    const currentConfig = await this.loadConfig();
    const newConfig = { ...currentConfig, ...updates };
    await this.saveConfig(newConfig);
    return newConfig;
  }

  async getConfig(key = null) {
    const config = await this.loadConfig();
    return key ? config[key] : config;
  }

  getConfigPath() {
    return this.configFile;
  }

  getConfigDir() {
    return this.configDir;
  }
}

module.exports = ConfigManager;